from langchain_core.prompts import ChatPromptTemplate

from common.llm_builder import llm_messages, llm

# 0-创建一个ChatPromptTemplate(这步很常见，目的是把通用的Message定义为模板，后续直接改动参数)
chat_prompt_template = ChatPromptTemplate.from_messages(llm_messages)

# 1.1-【推荐】先使用from_messages转化为prompt_template，然后使用invoke进行参数注入【而且支持链式】
chat_prompt_template_message = chat_prompt_template.invoke({
    "role": "数学",
    "domain": "数字计算",
    "question": "1+150？"
})
chat_prompt_detail1 = llm.invoke(chat_prompt_template_message)
print("chat_prompt_detail1：", chat_prompt_detail1)

# 1.2-【推荐】构建链式对象
llm_chain = chat_prompt_template | llm
chat_prompt_detail1_chain = llm_chain.invoke({
    "role": "数学",
    "domain": "数字计算",
    "question": "1+150？"
})
print("chat_prompt_detail1_chain：", chat_prompt_detail1_chain)

# 2-手动渲染(template调用format_messages注入参数后转化为真实业务数组)后再调用invoke接口回答
messages_format_messages = chat_prompt_template.format_messages(role="数学", domain="数学", question="1+1=？")
chat_prompt_detail2 = llm.invoke(messages_format_messages)
print("chat_prompt_detail2：", chat_prompt_detail2)

# 3-只字符串
messages_format = chat_prompt_template.format(role="数学", domain="数学", question="1+1=？")
chat_prompt_detail3 = llm.invoke(messages_format)
print("chat_prompt_detail3：", chat_prompt_detail3)
